Device Details


Overview

Name | Version: Kasm LFO 1.14
Author: kevleyski
Device Type: MIDI Effect
Description: Algorithmic LFOs with Ableton Live mappings and MIDI CC!

This is a demonstration of the Kasm Rust SDK continuous control data generated inside of Ableton Live, the algorithm can be of any complexity

LFO input can also be diven by note pattern triggers, encoder movement behaviour and so on, with Kasm you can make your own live performance LFOs that change direction or holds on certain notes or knob twiddles for example

Go edit your own bonkers algorithms in Rust code here make it do anything:
https://pyrmontbrewery.com/get_kasm
m

Testers of this device get A$15 off, in Ableton click the "Kasm Rust" title as shown the image above to get the current coupon code - if you can leave a comment here that's wonderful, but no worries mate

Students get a 30% discount, use KASMSTU at the checkout

!! NOTE: you need the latest Ableton 12.2 for this as it uses the new V8 jsinterp from Max9 !!

But... if you don't have Max4Live or have an older Ableton Live version no worries - Kasm is WebAssembly so it also runs on a regular web browsers too! You can interface with Ableton via WebMIDI instead, this way you can develop and test with Kasm SDK in Chrome/Firefox, try it out here:
https://pyrmontbrewery.com/kasm


For those interested, this is what the LFO Rust code (Ableton Live and Web version uses identical WebAssembly)...

pub fn kasm_lfo_logarithmic(
_note: i32,
cc_number: i32,
_velocity: i32,
enc1: i32,
enc2: i32,
_step: i32,
_bar: i32,
) -> i32 {
let now = crate::get_current_time_ms();
let mut last_time = LAST_LFO_TIME.write().unwrap();
let mut phase = LFO_PHASE.write().unwrap();

// Calculate time delta in milliseconds
let delta_ms = if *last_time == 0 {
*last_time = now;
0.0
} else {
let delta = now.saturating_sub(*last_time) as f32;
*last_time = now;
delta
};

// Calculate phase increment based on speed and tempo/bar length
let phase_increment = lfo_phase_increment(delta_ms, enc1);

// Accumulate phase (0..1 range)
*phase = (*phase + phase_increment).fract();

// enc2 controls logarithmic scaling
let log_scale = 1.0 + (enc2 as f32 / 127.0) * 9.0;

// Calculate logarithmic function
let log_input = 1.0 + *phase * (log_scale - 1.0);
let log_value = log_input.ln() / log_scale.ln();
let lfo_value = (log_value * 127.0) as i32;

send_cc(cc_number, lfo_value.max(0).min(127), 0);
cc_number
}

Details

Live Version Used: 12.2
Max Version Used: 9.0
Date Added: Aug 04 2025 09:11:01
Date Last Updated: Aug 15 2025 05:12:02
Downloads: 73
License: None
Average Rating

Log in to rate this device

-n/a-

Files

Device File: Kasm LFO.amxd
 


Login to comment on this device.

Browse the full library